<?php
	/*

	Connect
	-------

	Подключает в начало страницы линки на внешние ресурсы - js и css.

	В результате работы получаем в тэге <HEAD> вхождения типа:
		<script type="text/javascript" language="Javascript" >{{_}}</script>
		<script type="text/javascript" language="Javascript" src="{{js}}{{_}}.js"></script>

	Два вариант использования:

	1. {{!connect "news.css"}} или {{!connect "news.js"}}
			- запоминает, что данные файлы нужно прилинковать в <HEAD> страницы.

			- ещё варианты:
				{{!connect "news.css" path="custompath"}}
				{{!connect "news.css" lib="wikiedit"}}
				{{!connect "news.css" pos="top"}} - добавить в очередь с приоритетом 1, по умолчанию приоритет 20

	2. {{!connect compile="css"}} или {{!connect compile="js"}}
			- генерирует набор соответствующий линков для <HEAD>, при этом избегает дублирующих вхождений.

	-------

	$params:
		0 - имя файла для прилинковки, файл предполагается лежащим в {{js}} или {{css}}
		"compile" - флаг компиляции

	Хранит данные в $tpl:
	$tpl->CONNECT = array(
			"js"=>array("",...),
			"css"=>array("",...),
		);

	 */

$str = "";

$compile = isset($params["compile"]) ? $params["compile"] : false;
$pos = isset($params["pos"]) ? $params["pos"] : false;

if ( $compile ) {
	//компилируем накопленное
	if ( isset($tpl->CONNECT[$compile]) && is_array($tpl->CONNECT[$compile]) ) {
		$template = "_/connect.html:".$compile;
		$template_func = $tpl->parseTemplate($template);
		switch ($compile) {
		case 'css':
			$files = array();
			foreach( $tpl->CONNECT[$compile] as $fname ) {
				$files[] = $fname['file'];
			}
			if ($fname_ = $tpl->isCssCached($files)) {
			} else {
				$fname_ = $tpl->cacheCss($files);
			}
			$tpl->set("*",$fname_);
			$str .= $tpl->call($template_func);
			break;
		case 'js':
			$files = array();
			foreach( $tpl->CONNECT[$compile] as $fname ) {
				$files[] = $fname['file'];
			}
			if ($fnames_ = $tpl->isJsFilesCached($files)) {
			} else {
				$fnames_ = $tpl->cacheJs($files);
			}
			foreach ($fnames_ as $fname_) {
				$tpl->set("*",$fname_);
				$str .= $tpl->call($template_func);
			}
			break;
		default:
			foreach( $tpl->CONNECT[$compile] as $fname ) {
				$tpl->set("*",$fname);
				$str .= $tpl->call($template_func);
			}
			break;
		}
	}
	echo $str;
} else {

	// имя файла
	if (isset($params['url'])) {
		$fname = $params['url'];
	} else {
		$fname = $params[0];
	}

	// тип файла (расширение)
	if (isset($params['type'])) {
		$ext = $params['type'];
	} else {
		$ext = substr($fname, strrpos($fname, '.')+1);
	}

	// уже подключили?
	$file_in_array = isset($tpl->CONNECT[$ext][$fname]);

	if (!$file_in_array || $pos == "top")
	{
		if ($file_in_array) {
			$params = $tpl->CONNECT[$ext][$fname];
		} else {
			if (isset($params['href'])) {
			} elseif (isset($params["path"])) { // файл с произвольным путём
				$params['file'] = $fname;
				$params['href'] = rtrim($ri->Href($params["path"]),"/");
			} else { // просто файл в текущей шкуре
				$params['file'] = $tpl->findFile($ext, $fname, $tpl->_skin);
				$params['href'] = $tpl->tpl_base_path.substr($params['file'], strlen($tpl->tpl_base_dir));
			}
		}

		if (!isset($tpl->CONNECT[$ext])) $tpl->CONNECT[$ext] = array();
		switch($pos) {
			case "top":
				unset($tpl->CONNECT[$ext][$fname]);
				$tpl->CONNECT[$ext] = array_merge(array($fname => $params), $tpl->CONNECT[$ext]);
			break;

			case "bottom":
			default:
				$tpl->CONNECT[$ext][$fname] = $params;
			break;
		}

	}
}

?>
